#include <iostream>
#include <string>
#include <map>
using namespace std;
#define DEBUG
const int N=60;

double equa[N][N]; //元素 化学式 
map<string, int> mp[N]; //统计物质中各种元素的个数 
map<string, bool> cnt; //标记方程式中出现过的元素 

int m, elecnt; //化学式个数 元素个数

inline void printequa()
{
    int i, j; //矩阵行 列

    for(i=1; i<=elecnt; i++)
    {
        for(j=1; j<=m; j++)
            printf("%.2lf ", equa[i][j]);
        puts("");
    }
    puts("");
}

inline void init()
{
    for(int i=1; i<=m; i++)
        mp[i].clear();
    cnt.clear();
    elecnt=0; //元素个数

}

inline void read() //处理输入的行列式，并且保存在矩阵中
{
    string line, ele; //方程式 元素种类 
    int num=0; //元素数量
    for(int i=1; i<=m; i++) //第i个化学式
    {
        cin >> line;
        int len=line.size();
        for(int j=0; j<len; ) //i行j个化学式
        {
            ele.clear(); num=0;

            for(; j<len && 'a'<=line[j] && line[j]<='z'; j++)
                ele=ele+line[j];
            for(; j<len && '0'<=line[j] && line[j]<='9'; j++)
                num=num*10+line[j]-'0';
            mp[i][ele]=num;
            cnt[ele]=1; //当前出现过
            // printf("%s: ", line.c_str());
            // printf("read ele:%s num:%d\n", ele.c_str(), num);
        }
        
        
    }

    for(auto &[ele, k]:cnt) //处理每个元素
    {
        elecnt++;
        for(int i=1; i<=m; i++)
        {
            equa[elecnt][i]=mp[i][ele];
        }
    }

}

inline bool solve()
{
    int i, j, k, kc; //矩阵行(元素)elecnt 列(化学式)m 行 列
    for(i=1; i<=elecnt; i++)
    {
        for(j=1; j<=m; j++) //处理每个存在非0元素行
            if(equa[i][j]!=0) break;
        if(j>m) continue;

        if(equa[i][i]==0)
        {
            //如果当前主元为0，则找到当前列的其他非零行并交换
            for(k=i+1; k<=elecnt && equa[k][i]==0; k++);

            for(kc=1; kc<=m; kc++) //i j行互换
                swap(equa[k][kc], equa[i][kc]);   
        }

        for(k=i+1; k<=elecnt; k++) //处理第k行的主元列和后续非0元素，化为阶梯型
        {
            double p=equa[k][i]/equa[i][i];
            for(kc=1; kc<=m; kc++)
                equa[k][kc]-=equa[i][kc]*p;
            // printf("---------[%.2lf %d %d %d %d]----------\n", p, i, j, k, kc);
            // printequa();
            // printf("--------------------------------\n", i, j);              
        }

    }

    int ans=0;
    for(i=1; i<=elecnt; i++)
    {    
        for(j=1; j<=m && abs(equa[i][j])<=1e-6; j++);
        ans+= j<=m;
    }
    return ans<m; //矩阵满秩无解
}

signed main()
{
    #ifdef DEBUG
        freopen("../in.txt", "r", stdin);
        freopen("../out.txt", "w", stdout);
    #endif

    int T; cin >> T; 
    while(T--) //有T个方程式
    {
        cin >> m; //物质个数
        init(); //不清空 见祖宗

        read();
        printf("%c\n", solve()?'Y':'N');

    }
    return 0;
}